socket实验 您所在的位置:网站首页 smtp tcp socket实验

socket实验

#socket实验| 来源: 网络整理| 查看: 265

Q&A

1、email应用的组成? 邮件客户端、邮件服务器、SMTP协议

2、为什么email要使用客户端服务器的结构,而不是直接在用户间建立连接? 想象自己不在线和对方不在线的情况

3、SMTP协议,简单邮件传输协议 传输层协议:TCP 端口:25 传输三个阶段:握手,建立连接,关闭 交互模式:命令相应 Email消息只能包含7位ASCII码,为了支持发送pdf等格式,使用了MIME(多媒体邮件扩展),在邮件头部添加额外的行来声明有多媒体内容,编码格式等内容 利用回车换行确定消息的结束

4、SMTP的格式: HELO、MAILFROM、RCPT TO、DATA(邮件内容) 、QUIT

5、pop协议,邮件访问协议,从服务器上获取邮件使用的协议 命令相应 两种模式:下载并删除模式,下载并保持模式 POP3是无状态的 此外还有IMAP协议,所有消息保存在服务器,允许用户利用文件夹组织消息,支持跨对话等,有状态

编写实现smtp客户端

这个是《计算机网络——自顶向下方法》的socket实验,要求手动发送smtp规定的几个组成部分,还是比较简单,但在实现的时候要多一个验证的步骤,遇到了一些问题。 配置的是服务器是smtp.163.com,端口25 代码:

from socket import * import base64 msg_from='*******' #发送方邮箱 username = base64.b64encode(msg_from.encode()).decode() password = base64.b64encode('*******'.encode()).decode() msg = "\r\n I love computer networks!" endmsg = "\r\n.\r\n" # Choose a mail server mailserver = 'smtp.163.com' # Create socket called clientSocket and establish a TCP connection with mailserver clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((mailserver,25)) recv = clientSocket.recv(2048) recv = recv.decode() print (recv) if recv[:3] != '220': print ('220 reply not received from server.') # Send HELO command and print server response. heloCommand = 'HELO Alice\r\n' clientSocket.send(heloCommand.encode()) recv1 = clientSocket.recv(2048) recv1 = recv1.decode() print (recv1) if recv1[:3] != '250': print ('250 reply not received from server.') #AUTH clientSocket.sendall('AUTH LOGIN\r\n'.encode()) recv = clientSocket.recv(2048).decode() print(recv) if (recv[:3] != '334'): print('334 reply not received from server') clientSocket.sendall((username + '\r\n').encode()) recv = clientSocket.recv(1024).decode() print(recv) if (recv[:3] != '334'): print('334 reply not received from server') clientSocket.sendall((password + '\r\n').encode()) recv = clientSocket.recv(1024).decode() print(recv) if (recv[:3] != '235'): print('235 reply not received from server') # Send MAIL FROM command and print server response. clientSocket.send('MAIL FROM:\r\n'.encode()) mailfromMessage = clientSocket.recv(1024) print(mailfromMessage) # Send RCPT TO command and print server response. clientSocket.send('RCPT TO:\r\n'.encode()) RCPTMessage = clientSocket.recv(1024) print(RCPTMessage) # Send DATA command and print server response. clientSocket.send('DATA\r\n'.encode()) DATAMessage = clientSocket.recv(1024) print(DATAMessage) # Send message data. clientSocket.send(msg.encode()) # Message ends with a single period. clientSocket.send(endmsg.encode()) # Send QUIT command and get server response. clientSocket.send('QUIT\r\n'.encode()) quitMessage = clientSocket.recv(1024) print(quitMessage)

收到服务器发送回的消息: 在这里插入图片描述 查看邮箱确实收到了邮件



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有